package com.example.hzly.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.hzly.entity.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface DestinationMapper extends BaseMapper<Destination> {
    
    // 修改查询，只包含实际存在于destination表中的字段
    Destination selectDestinationById(@Param("id") Long id);
    
    /**
     * 查询热门目的地列表
     */
    List<Destination> selectHotDestinations();

    /**
     * 根据区域查询目的地列表
     */
    List<Destination> selectDestinationsByRegion(@Param("region") String region);

    /**
     * 根据类型查询目的地列表
     */
    List<Destination> selectDestinationsByType(@Param("type") String type);

    /**
     * 根据季节查询目的地列表
     */
    List<Destination> selectDestinationsBySeason(@Param("season") String season);

    /**
     * 分页查询目的地列表
     */
    IPage<Destination> selectDestinationsByPage(Page<Destination> page,
                                                @Param("keyword") String keyword,
                                                @Param("region") String region,
                                                @Param("type") String type,
                                                @Param("season") String season,
                                                @Param("theme") String theme,
                                                @Param("orderBy") String orderBy);

    /**
     * 增加目的地访问量
     */
    int incrementVisits(@Param("id") Long id);

    /**
     * 查询目的地天气信息
     */
    WeatherInfo selectWeatherInfo(@Param("id") Long destinationId);

    /**
     * 查询目的地天气预报
     */
    List<WeatherForecast> selectWeatherForecast(@Param("id") Long destinationId);

    /**
     * 查询目的地交通信息
     */
    TrafficInfo selectTrafficInfo(@Param("id") Long destinationId);

    /**
     * 获取目的地统计信息
     */
    DestinationStats selectStatsByDestinationId(@Param("destinationId") Long destinationId);

    /**
     * 获取区域筛选选项
     */
    List<Map<String, Object>> selectRegionOptions();

    /**
     * 获取类型筛选选项
     */
    List<Map<String, Object>> selectTypeOptions();

    /**
     * 获取季节筛选选项
     */
    List<Map<String, Object>> selectSeasonOptions();

    /**
     * 获取主题筛选选项
     */
    List<Map<String, Object>> selectThemeOptions();
}